C2 ビジネス課題とドメイン駆動設計
ドメインとは
ドメイン駆動設計における「ドメイン」とはソフトフェアが解決しようとしている特定の問題領域を指す
ソフトウェアが扱う業務の本質的な側面であり、ユーザーの要求、課題、業務上の問題を含む
ドメインモデルの重要性
ドメインモデルとは現実の複雑なビジネスの世界から、システムで解決したい課題に関する重要な要素(知識やルール)だけを抜き出し、体系立てて整理したもの
適切なドメインモデルを構築することで、ビジネス要件の正確な実現が可能になり、ビジネスの変化をソフトウェアに反映しやすくなる
中核と一般の分類と開発アプローチ
ドメイン駆動設計では、問題領域を中核と一般に分類し、分類に適した開発アプローチを適応することを重視する
中核ドメイン
組織の競争優位性を生み出す領域
一般ドメイン
ビジネスを運営するうえで必要ではあるものの、競争優位性には直接関係しない領域
詳しくは以下のページを参照
1章 事業活動を分析する
11章 設計を進化させる
ドメイン駆動設計の全体像
ドメイン駆動設計は、大きく「戦略的設計」と「戦術的設計」の2つの側面から構成される
戦略的設計
ビジネス価値を最大化するための大きな設計方針を決定する
ビジネスの複雑さの理解し、管理可能な形式に整理する
変化に強いシステムの構造設計
ドメインの理解
ドメインエキスパートと会話し、中核ドメインの課題を把握
ユビキタス言語の確立
ドメインモデルを通じて中核ビジネスルールや制約を明確化
イベントストリーミングなどと用いて重要なビジネスプロセスを把握
境界づけられたコンテキストの定義
大規模なドメインを意味のある単位に分割し責務範囲を明確化
各コンテキスト内での固有の用語定義とビジネスルールの確立
コンテキストマッピングの定義
コンテキスト間の関係性を明示的に定義
コンテキスト間の連携パターンの選択
統合方式の選定
戦術的設計
実際のドメインモデルを実装するための具体的な設計手法を提供する
重要なのは純粋なドメインモデルを保ちながら、技術的な実装の詳細から依存を分離すること
[* ドメインモデルとドメインオブジェクト
戦略的設計で整理されたドメインモデルを、実際のコードとして具現化したものがドメインオブジェクト
ドメインモデルを表現する手段を2つある
図による可視化
コードとして実装